<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>document</title>
	<meta name="viewport" content="width=device-width,initial-scale=1">
	<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
	<style>
		h5{margin:5px 0;}
	</style>
</head>
<body>
	<div id="box">
		<!-- ^[a-zA-Z0-9_\u4e00-\u9fa5]+$   匹配中英文数字 -->
		<h5>^[a-zA-Z][a-zA-Z0-9_]{4,15}$  匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)</h5>
		<input type="text" onblur="check(this,'^[a-zA-Z][a-zA-Z0-9_]{4,15}$')">
		<h5>\d 匹配纯数字</h5>
		<input type="text" onblur="check(this,'^[0-9]*$')">
		<h5>(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]  匹配网址URL</h5>
		<input type="text" onblur="check(this,'(https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]')">
		<h5>^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$  匹配Email地址</h5>
		<input type="text" onblur="check(this,'^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$')">
		<h5>/\p{Unified_Ideograph}/u  匹配汉字</h5>
		<input type="text" onblur="check(this,'/\p{Unified_Ideograph}/u')">
		<h5>^[1-9]{6}\d*$  匹配6位正整数</h5>
		<input type="text" onblur="check(this,'^[1-9]{6}\d*$')">
		<h5>^[1-9]{1,6}\d*$  匹配1-6位正整数</h5>
		<input type="text" onblur="check(this,'^[1-9]{1,6}\d*$')">
		<h5>^[0-9]{1,10}([.][0-9]{1,2})?$  匹配小数点前10位，后两位</h5>
		<input type="text" onblur="check(this,'^[0-9]{1,10}([.][0-9]{1,2})?$')">
		<h5>^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$  匹配中文姓名</h5>
		<input type="text" onblur="check(this,'^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$')">
		<h5>匹配身份证号码</h5>
		<input type="text" onblur="validateIdCard(this.value)">
		<h5>/^(0|[1-9][0-9]*)$/</h5>
		<input type="text" oninput="autoCheck(this,'^(0|[1-9][0-9]*)$')" onpropertychange="autoCheck(this,'^(0|[1-9][0-9]*)$')" value="">
		<h5>/^1[3456789][0-9]{9}$/ 匹配手机号码</h5>
		<input type="text" onblur="check(this,'^1[3456789][0-9]{9}$')">
		<h5>/^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{7,10}$/ 匹配7到10位数字字母，无顺序</h5>
	</div>
	<script type="text/javascript">
		// https://github.com/any86/any-rule/blob/master/README.md
		var pwd={
			validator: function(value, param){
				if(!/[!$#%]/.test(value)){
					this.message='必须包含特殊字符（!$#%）';
					return;
				}
				if(!/^.{7,}$/.test(value)){
					this.message='用户密码至少7位';
					return;
				}
				if(!/[a-zA-Z]+/.test(value)){
					this.message='用户密码没有包含字母';
					return;
				}
				if(!/\d+/.test(value)){
					this.message='用户密码没有包含数字';
					return;
				}
				// return /^\w{7,}$/.test(value) && /\d+/.test(value) && /[a-zA-Z]+/.test(value) && /[!$#%]/.test(value);
			},
			message: '用户密码至少由7位字母和数字组成!'
		};
		pwd.validator('y!asasas');
		console.log(pwd.message);
		function check(Obj,Reg){
			var reg=new RegExp(Reg);
			if(reg.test(Obj.value)){
				$(Obj).prev().find('font').remove();
				$(Obj).prev().append("<font style='margin-left:50px;color:#0099d9;'>合法</font>");
			}else if(Obj.value==''){
				$(Obj).prev().find('font').remove();
				$(Obj).prev().append("<font style='margin-left:50px;color:#f40;'>不能为空</font>");
			}else{
				$(Obj).prev().find('font').remove();
				$(Obj).prev().append("<font style='margin-left:50px;color:#f40;'>不合法</font>");
			}
		}
		function autoCheck(Obj,Reg){
			var rs="";
			var reg=new RegExp(Reg);
			for (var i = 0; i < Obj.value.length; i++) {
				if(!reg.test(Obj.value.substr(i, 1))){
					rs=rs+'';
				}else{
					rs = rs+Obj.value.substr(i, 1);
				}
			}
			Obj.value=rs;
		}
		function validateIdCard(idCard){
		 	//15位和18位身份证号码的正则表达式
		 	var regIdCard=/(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$)/;

		 	//如果通过该验证，说明身份证格式正确，但准确性还需计算
			if(!regIdCard.test(idCard)){
		  	alert("身份证格式不正确!");
		 	}else{
		 		alert("身份证格式正确!");
		 	}
		}
	</script>
</body>
</html>